using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using FireStarterModeller.BO;
using Firestarter.DB.Schema.Logic;

namespace Firestarter.DB.Schema.Test.Logic
{
    //public abstract class TestBaseForSchema_FixedTestPack : TestBaseForSchema
    //{
    //    protected DBDatabase _dbDatabase;
    //    protected Table _uniqueKeyDBTable;
    //    protected Table _childDBTable;
    //    protected Table _parentDBTable;
    //    protected Table _noPrimaryKeyDBTable;
    //    protected Table _manyDataTypesDBTable;
    //    protected Table _compositePKDBTable;
    //    protected Table _compositeFKDBTable;

    //    protected TestBaseForSchema_FixedTestPack() : base("SchemaInfo_Test_Fixed")
    //    {
    //    }

    //    #region Overrides of TestBaseForSchema

    //    protected override void SetupTestDataBase()
    //    {
    //        base.SetupTestDataBase();
    //        SetupDatabaseSchemaTestPack();
    //    }

    //    private void SetupDatabaseSchemaTestPack()
    //    {
    //        IDbConnection connection = CreateTestDBConnection();
    //        //_schemaTestDbUtil.ClearDatabase(connection);

    //        _dbDatabase = new DBDatabase();
    //        _dbDatabase.DatabaseName = _schemaTestDbUtil.TestDatabaseName;

    //        _parentDBTable = new Table("ParentTable");
    //        _dbDatabase.Tables.Add(_parentDBTable);
    //        DBTableBuilder parentTableInfoBuilder = new DBTableBuilder(_parentDBTable);
    //        parentTableInfoBuilder.AddPrimaryKeyColumn();
    //        parentTableInfoBuilder.AddColumn("ParentName");

    //        _childDBTable = new Table("ChildTable");
    //        _dbDatabase.Tables.Add(_childDBTable);
    //        DBTableBuilder childTableInfoBuilder = new DBTableBuilder(_childDBTable);
    //        childTableInfoBuilder.AddPrimaryKeyColumn();
    //        childTableInfoBuilder.AddColumn("ChildName");
    //        childTableInfoBuilder.AddForeignKey("ForeignKeyName", _parentDBTable);

    //        _uniqueKeyDBTable = new Table("UniqueKeyTable");
    //        _dbDatabase.Tables.Add(_uniqueKeyDBTable);
    //        DBTableBuilder indexedTableInfoBuilder = new DBTableBuilder(_uniqueKeyDBTable);
    //        indexedTableInfoBuilder.AddPrimaryKeyColumn();
    //        indexedTableInfoBuilder.AddUniqueKeyColumn();
    //        indexedTableInfoBuilder.AddUniqueKey("CompositeUniqueKey", "KeyColumn1", "KeyColumn2");

    //        _noPrimaryKeyDBTable = new Table("NoPKTable");
    //        _dbDatabase.Tables.Add(_noPrimaryKeyDBTable);
    //        DBTableBuilder noPKTableInfoBuilder = new DBTableBuilder(_noPrimaryKeyDBTable);
    //        noPKTableInfoBuilder.AddUniqueKey("UniqueKey", "Name");

    //        _manyDataTypesDBTable = new Table("ManyDataTypesTable");
    //        _dbDatabase.Tables.Add(_manyDataTypesDBTable);
    //        DBTableBuilder manyDataTypesTableInfoBuilder = new DBTableBuilder(_manyDataTypesDBTable);
    //        manyDataTypesTableInfoBuilder.AddPrimaryKeyColumn();

    //        _compositePKDBTable = new Table("CompositePKTable");
    //        _dbDatabase.Tables.Add(_compositePKDBTable);
    //        DBTableBuilder compositePKTableInfoBuilder = new DBTableBuilder(_compositePKDBTable);
    //        compositePKTableInfoBuilder.AddPrimaryKey("PKColumn1", "PKColumn2");
    //        compositePKTableInfoBuilder.AddColumn("Name");

    //        _compositeFKDBTable = new Table("CompositeFKTable");
    //        _dbDatabase.Tables.Add(_compositePKDBTable);
    //        DBTableBuilder compositeFKTableInfoBuilder = new DBTableBuilder(_compositeFKDBTable);
    //        compositeFKTableInfoBuilder.AddPrimaryKeyColumn();
    //        compositeFKTableInfoBuilder.AddColumn("Name");
    //        compositeFKTableInfoBuilder.AddForeignKey("CompositeForeignKey", _compositePKDBTable); ;
            
    //        CreateTableInDB(connection, _parentDBTable);
    //        CreateTableInDB(connection, _childDBTable);
    //        CreateTableInDB(connection, _uniqueKeyDBTable);
    //        CreateTableInDB(connection, _noPrimaryKeyDBTable);
    //        CreateTableInDB(connection, _manyDataTypesDBTable);
    //        CreateTableInDB(connection, _compositePKDBTable);
    //        CreateTableInDB(connection, _compositeFKDBTable);
    //    }

    //    private void CreateTableInDB(IDbConnection connection, Table dbTable)
    //    {
    //        CreateTableSqlBuilder_MySql sqlBuilderCreateTable = _schemaTestDbUtil.CreateSqlBuilderCreateTable(dbTable.TableNameDB);
    //        DatabaseScriptCreator databaseScriptCreator = new DatabaseScriptCreator();
    //        string sql = databaseScriptCreator.CreateTable(dbTable, sqlBuilderCreateTable);
    //        _schemaTestDbUtil.ExecuteSql(connection, sql);
    //    }

    //    #endregion
    //}
}
